package com.book.book.mapper;

import com.book.book.domain.Borrow;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author admin
 * @description 针对表【borrow】的数据库操作Mapper
 * @createDate 2025-06-07 16:08:19
 * @Entity generator.domain.Borrow
 */
@Mapper
public interface BorrowMapper {

    int deleteByPrimaryKey(Long id);

    int insert(Borrow record);

    int insertSelective(Borrow record);

    Borrow selectByPrimaryKey(Long id);

    int updateByPrimaryKeySelective(Borrow record);

    int updateByPrimaryKey(Borrow record);

    /**
     * 根据用户ID查询借阅记录。
     * @param userid 用户ID
     * @param returntimeIsNull 如果为 true，查询 returnTime IS NULL (当前借阅)
     * @param returntimeIsNotNull 如果为 true，查询 returnTime IS NOT NULL (已归还)
     * 注意：returntimeIsNull 和 returntimeIsNotNull 不应同时为 true。
     * 如果都为 null/false，则查询所有借阅记录。
     * @return 借阅记录列表
     */
    List<Borrow> selectByUserId(@Param("userid") Integer userid,
                                @Param("returntimeIsNull") Boolean returntimeIsNull,
                                @Param("returntimeIsNotNull") Boolean returntimeIsNotNull);

    /**
     * 查询指定用户和图书是否有正在进行中的借阅记录（returnTime IS NULL）
     * @param bookid 图书ID
     * @param userid 用户ID
     * @return 正在进行的借阅记录（如果有），否则为 null
     */
    Borrow selectActiveBorrowByBookAndUser(@Param("bookid") Integer bookid, @Param("userid") Integer userid);

    /**
     * 获取包含图书和用户信息的借阅列表。
     * 可通过传入 Borrow 对象的 userid, bookid, returntime 来过滤。
     * @param borrow 包含查询条件的 Borrow 对象
     * @return 借阅记录列表
     */
    List<Borrow> selectBorrowDetails(Borrow borrow);

}